import Dep from "./dep.js";
// 拦截器
// 一个对象产生一个defineReactive拦截器
export default function defineReactive(target, key, val) {
  const dep = new Dep();
  console.log(`${key} ==> `, dep);
  // dep 拦截每个对象的操作
  Object.defineProperty(target, key, {
    get() {
      // 只有Dep.target 指向Watcher 时,才会进行依赖收集
      if (Dep.target) {
        // 当我们在渲染层调用data时, 会触发依赖收集
        dep.depend();
      }
      return val;
    },
    set(value) {
      // 如果赋值相同就不更新
      if (val === value) return;
      val = value;
      // 不考虑设置的值为对象的情况
      // 通知更新
      console.log(`更新的dep ===> `, dep.watcher);
      debugger;
      dep.notify();
    },
  });
}
